
package com.liwt.pongo;

/**
 * 来自庞果网 <h2>题目详情</h2>
 * <p>
 * 我们要给每个字母配一个1-26之间的整数，具体怎么分配由你决定，
 * <p>
 * 但不同字母的完美度不同，而一个字符串的完美度等于它里面所有字母的完美度之和，
 * <p>
 * 且不在乎字母大小写，也就是说字母F和f的完美度是一样的。
 * <p>
 * 现在给定一个字符串，输出它的最大可能的完美度。
 * <p>
 * 例如：dad，你可以将26分配给d，25分配给a，这样整个字符串最大可能的完美度为77。
 * 
 * @author likebamboo
 * @see
 */
public class PerfectChar {

    public static int perfect(String s) {
        int result = 0;
        s = s.toLowerCase();
        int[] count = new int[26];
        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'a']++;
        }

        int temp = 0;
        // 将统计数组从大到小排序
        for (int i = 0; i < 25; i++) {
            for (int j = i + 1; j < 26; j++) {
                if (count[j] > count[i]) {
                    temp = count[i];
                    count[i] = count[j];
                    count[j] = temp;
                }
            }
        }

        // 设定并计算完美度
        for (int perfect = 26, i = 0; i < count.length; i++, perfect--) {
            result += perfect * count[i];
        }

        return result;
    }

    public static void main(String[] args) {
        String s = "aab";
        System.out.println(perfect(s));
    }
}
